package com.hw01.service;

import org.springframework.web.multipart.MultipartFile;

import com.baomidou.mybatisplus.extension.service.IService;
import com.hw01.common.Result;
import com.hw01.common.ResultPage;
import com.hw01.dto.ChangePasswordDto;
import com.hw01.dto.EmployeeAddDto;
import com.hw01.dto.EmployeeQueryDto;
import com.hw01.dto.EmployeeUpdateDto;
import com.hw01.entity.Employee;
import com.hw01.vo.EmployeeVo;
import com.hw01.vo.LoginUserVo;

import java.util.List;

/**
 * <p>
 * 员工用户表 服务类
 * </p>
 *
 * @author zhong
 * @since 2024-03-18
 */
public interface EmployeeService extends IService<Employee> {


    /**
     * 按id获取员工信息
     *
     * @param id 员工id
     * @return 结果
     */
    Result<EmployeeVo> getEmployeeById(Long id);

    /**
     * 修改密码
     * 
     * @param dto 新密码
     * @return 结果
     */
    Result<Boolean> changePassword(ChangePasswordDto dto);

    /**
     * 按条件查询员工信息(分页)
     * 
     * @param dto 查询员工信息
     * @return 结果分页
     */
    ResultPage<EmployeeVo> getEmployeePage(EmployeeQueryDto dto);

    /**
     * 用户登录
     * 
     * @param loginName 登录用户名
     * @param password 密码
     * @return 结果 登录用户信息
     */
    Result<LoginUserVo> login(String loginName, String password);

    /**
     * 用户登录(网页)
     *
     * @param loginName 登录用户名
     * @param password 密码
     * @return 结果 登录用户信息
     */
    Result<LoginUserVo> loginWeb(String loginName, String password);

    /**
     * 新增
     * 
     * @param dto 员工信息
     * @return 结果
     */
    Result<Boolean> add(EmployeeAddDto dto);

    /**
     * 修改
     * 
     * @param dto 员工信息
     * @return 结果
     */
    Result<Boolean> update(EmployeeUpdateDto dto);

    /**
     * 删除
     * 
     * @param id 主键id
     * @return 结果
     */
    Result<Boolean> delete(Long id);

    /**
     * 用户上传头像
     * 
     * @param userId 员工用户id
     * @param file 头像
     * @return 结果
     */
    Result<String> uploadPhotoAvatar(Long userId, MultipartFile file);

    /**
     * 查询部门所有员工
     * @param orgId 部门id
     * @return 结果
     */
    Result<List<EmployeeVo>> getEmployeeByOrgId(Long orgId);
}
